package com.bq.server.base;

import cn.hutool.core.util.ArrayUtil;
import com.bq.server.enumeration.Enumeration;
import com.bq.server.exception.BusinessException;

import java.text.MessageFormat;

/**
 * 错误代码,请使用枚举类实现该接口
 *
 * @author: ChenSH
 * @date: Create by in 09:47 2019-09-20
 */
public interface ErrorCode extends Enumeration {


    @Override
    default Integer value() {
        return getCode();
    }

    @Override
    default String describe() {
        return getDescribe();
    }

    /**
     * 格式化输出
     *
     * @param arguments 参数
     * @return 格式化后字符串
     * @see MessageFormat#format(String, Object...)
     */
    default String format(Object... arguments) {
        return MessageFormat.format(getDescribe(), arguments);
    }

    /**
     * 错误代码
     */
    Integer getCode();

    /**
     * 错误描述
     */
    String getDescribe();

    default BusinessException businessException() {
        return BusinessException.of(this);
    }

    default BusinessException businessException(Object... arguments) {
        if (ArrayUtil.isEmpty(arguments)) {
            return businessException();
        }
        return BusinessException.of(getCode(), format(arguments));
    }
}
